package cl.utfsm.isw.mecanico.beans.menu.dao;


import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import cl.utfsm.isw.mecanico.to.MenuTO;
import cl.utfsm.isw.mecanico.to.OpcionTO;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class MenuDAO {
		
	private static String SQLMAP = "tablas/menu/sqlMapMenu.xml";

	public List<MenuTO> obtenerMenu(char tipoUsuario) throws Exception{
		
		System.out.println("[MenuDAO][obtenerMenu] Ingreso al Metodo.");
		List<MenuTO> secciones = null;
		
		try {
		
			HashMap parametros = new HashMap();
			parametros.put("tipoUsuario", String.valueOf(tipoUsuario));

			System.out.println("[MenuDAO][obtenerMenu] Parametros: " + parametros.toString());
			
			String resource = SQLMAP;
			Reader reader = Resources.getResourceAsReader(resource);
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			
			List resultado = sqlMap.queryForList("consultarSecciones", parametros);
			
			System.out.println("[MenuDAO][obtenerMenu] Salida: "+ resultado);
			
			if (resultado != null) {       
				secciones = new ArrayList<MenuTO>();
	            if (resultado.size() > 0) {
	            	System.out.println("[MenuDAO][obtenerMenu] Se setean secciones");
	            	for (int i = 0; i < resultado.size(); i++){
	            		MenuTO seccion = new MenuTO();
		            	System.out.println("[MenuDAO][obtenerMenu] Despues de crear objeto");
		                HashMap salida = (HashMap) resultado.get(i);
		                System.out.println("[MenuDAO][obtenerMenu] Despues de Castear");
		                seccion.setIdSeccion((int)(salida.get("idSeccion"))); 
		                seccion.setNombreSeccion((String)salida.get("nombreSeccion"));
		                seccion.setUrlImagen((String)salida.get("urlImagen"));
		                seccion.setOpciones(obtenerOpciones(tipoUsuario, seccion.getIdSeccion()));
		                secciones.add(seccion);
	            	}
	            }
	            System.out.println("[consultarClienteRut] Menu Obtenido. Cantidad de secciones: " + secciones.size());
			} else{
				System.out.println("[consultarClienteRut] No se obtuvo menu para el tipo de usuario: " + tipoUsuario);
			}		

		}catch(Exception e){
			System.out.println("[MenuDAO][obtenerMenu] Ocurrio un error al obtener las secciones: " + e.toString());
			throw e;
		}
		return secciones;
	}
	
public List<OpcionTO> obtenerOpciones(char tipoUsuario, int idSeccion) throws Exception{
		
		System.out.println("[MenuDAO][obtenerOpciones] Ingreso al Metodo");
		
		List<OpcionTO> opciones = new ArrayList<OpcionTO>();
		
		try {
		
			HashMap parametros = new HashMap();
			parametros.put("tipoUsuario", String.valueOf(tipoUsuario));
			parametros.put("idSeccion", idSeccion);

			System.out.println("[MenuDAO][obtenerOpciones] Parametros: " + parametros.toString());
			
			String resource = SQLMAP;
			Reader reader = Resources.getResourceAsReader(resource);
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			
			List resultado = sqlMap.queryForList("consultarOpciones", parametros);
			
			System.out.println("[MenuDAO][obtenerOpciones]  Salida: "+ resultado);
			
			if (resultado != null) {       
				opciones = new ArrayList<OpcionTO>();
	            if (resultado.size() > 0) {
	            	System.out.println("[MenuDAO][obtenerOpciones] Se setean opciones");
	            	for (int i = 0; i < resultado.size() ; i++){
	            		OpcionTO opcion = new OpcionTO();
		            	System.out.println("[MenuDAO][obtenerOpciones] Despues de crear objeto");
		                HashMap salida = (HashMap) resultado.get(i);
		                System.out.println("[MenuDAO][obtenerOpciones] Despues de Castear");
	        			opcion.setIdSeccion(idSeccion);
	        			opcion.setIdOpcion((int)(salida.get("idOpcion")));
	        			opcion.setNombreOpcion((String)(salida.get("nombreOpcion")));
	        			opcion.setUrlOpcion((String)(salida.get("urlOpcion")));
	        			opciones.add(opcion);
	            	}
	            }
	            System.out.println("[consultarClienteRut] Opciones Obtenidas. Cantidad de opciones: " + opciones.size());
			} else{
				System.out.println("[consultarClienteRut] No se obtuvo menu para la seccion: " + idSeccion);
			}		

		}catch(Exception e){
			System.out.println("[MenuDAO][obtenerMenu] Ocurrio un error al obtener las secciones: " + e.toString());
			throw e;
		}
		return opciones;
	}


}
